# Magentic-One 的工作基于多代理架构，其中一个主导的 Orchestrator 代理负责高级规划、指导其他代理并跟踪任务进度。
# Orchestrator 通过创建一个计划来处理任务开始，在维护的任务账本中收集所需的事实和有根据的猜测。
# 在计划的每个步骤中，Orchestrator 创建一个进度账本，在那里自我反思任务进度并检查任务是否完成。
# 如果任务尚未完成，它会分配 Magentic-One 的其他代理之一来完成一个子任务。
# 在分配的代理完成其子任务后，Orchestrator 更新进度账本，并继续这种方式，直到任务完成。
# 如果 Orchestrator 发现进度在足够多的步骤中未取得进展，它可以更新任务账本并创建一个新的计划。
# 这在上图中进行了说明；因此，Orchestrator 的工作被分为一个外部循环以更新任务账本和一个内部循环以更新进度账本。
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_agentchat.teams import MagenticOneGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.agents.web_surfer import MultimodalWebSurfer
# from autogen_ext.agents.file_surfer import FileSurfer
# from autogen_ext.agents.magentic_one import MagenticOneCoderAgent
# from autogen_agentchat.agents import CodeExecutorAgent
# from autogen_ext.code_executors.local import LocalCommandLineCodeExecutor

async def main() -> None:
    model_client = OpenAIChatCompletionClient(model="modelscope.cn/unsloth/Qwen3-14B-GGUF:Q5_K_M",
                                              model_info={
                                                  "vision": False,
                                                  "function_calling": True,
                                                  "family": "Qwen3",
                                                  "structured_output": True,
                                                  "json_output": True,
                                              },
                                              api_key="ollama",
                                              base_url="http://127.0.0.1:11434/v1")
    surfer = MultimodalWebSurfer(
        "WebSurfer",
        model_client=model_client,
    )

    team = MagenticOneGroupChat([surfer], model_client=model_client)
    await Console(team.run_stream(task="What is the UV index in Melbourne today?"))

    # # Note: you can also use  other agents in the team
    # team = MagenticOneGroupChat([surfer, file_surfer, coder, terminal], model_client=model_client)
    # file_surfer = FileSurfer( "FileSurfer",model_client=model_client)
    # coder = MagenticOneCoderAgent("Coder",model_client=model_client)
    # terminal = CodeExecutorAgent("ComputerTerminal",code_executor=LocalCommandLineCodeExecutor())

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())
